---
title: 环境变量
description: 如何使用环境变量配置Hollo。
---

import { Aside, Badge } from '@astrojs/starlight/components';

Hollo是通过环境变量进行配置的。你可以在项目根目录的 *.env* 文件中设置它们，或者使用Docker的`-e`/`--env`选项或Railway的环境变量进行设置。


基本设置
--------

### `PORT` <Badge text="可选" /> <Badge text="Railway中未使用" variant="tip" />

服务器监听的端口号。默认为3000。

### `BIND` <Badge text="可选" /> <Badge text="Railway中未使用" variant="tip" />

服务器监听的地址。必须是有效的IP地址或`localhost`。

### `DATABASE_URL` <Badge text="Railway中未使用" variant="tip" />

PostgreSQL数据库的URL，例如：`postgresql://hollo:password@localhost/hollo`。

### `SECRET_KEY` <Badge text="Railway中未使用" variant="tip" />

用于保护会话的密钥。必须至少44个字符长。你可以使用以下命令生成一个随机密钥：

~~~~ sh frame="none"
openssl rand -hex 32
~~~~

### `TZ` <Badge text="可选" />

应用程序的时区。
必须是有效的时区标识符，例如：`UTC`、`America/New_York`、`Asia/Shanghai`。

默认是`UTC`。

### `BEHIND_PROXY` <Badge text="可选" /> <Badge text="Railway中未使用" variant="tip" />

如果Hollo在反向代理后面，请将此设置为`true`。如果你将Hollo放在L7负载均衡器后面（通常应该这样做），请开启此选项。

默认关闭。

<Aside>
  启用此选项后，Hollo将信任来自反向代理的`X-Forwarded-For`、`X-Forwarded-Proto`和`X-Forwarded-Host`头。这对于安全来说非常重要。
</Aside>

### `ALLOW_PRIVATE_ADDRESS` <Badge text="可选" />

将此选项设置为`true`将禁用 SSRF（服务器端请求伪造）保护。

打开此选项可在本地网络中进行测试。

默认情况下关闭。

<Aside>
  启用此选项存在严重的安全隐患。
  仅在受信任的环境下使用此选项，切勿在生产环境中使用。
</Aside>


附加功能
--------

### `HOME_URL` <Badge text="可选" />

如果存在，主页将重定向到此URL。如果未设置，主页将显示实例上的账户列表。

### `REMOTE_ACTOR_FETCH_POSTS` <Badge text="可选" />

首次遇到远程用户时，从远程用户获取的最近公开帖子数量。

默认为`10`。

### `TIMELINE_INBOXES` <Badge text="可选" />

将此设置为`true`后，您的时间线就像收件箱一样：
时间线上可见的所有帖子都实际存储在数据库中，而不是在显示时实时过滤。
这对于有大量传入帖子的相对较大的实例非常有用。

从Hollo 0.4.0开始，它还处于实验阶段，可能存在一些错误，
但预计在稳定后将成为未来的默认行为。

默认情况下关闭。

### `ALLOW_HTML` <Badge text="可选" />

将此设置为`true`后，您可以在Markdown中使用原始HTML。
（Hollo中用Markdown来介绍个人资料和发布内容等）
当您想要使用比Markdown支持的格式更多样的格式时，它很有用，
但HTML标记和属性受到一定限制，以防止XSS攻击。

默认情况下关闭。


日志和调试
----------

### `LOG_LEVEL` <Badge text="可选" />

应用程序的日志级别。可选项有：`debug`、`info`、`warning`、`error`和`fatal`。

默认是`info`。

### `LOG_QUERY` <Badge text="可选" />

将此设置为`true`以记录SQL查询。

默认关闭。

### `LOG_FILE` <Badge text="可选" />

指定要写入结构化日志的文件路径。日志以JSON Lines格式写入。

### `SENTRY_DSN` <Badge text="可选" />

Sentry项目的DSN，用于发送错误报告和跟踪信息。


媒体存储
--------

### `DRIVE_DISK`

用于在 Hollo 上存储头像、自定义象形图和其他媒体等文件的磁盘驱动程序。

可以选择 `fs`（本地文件系统）或 `s3`（S3 兼容对象存储）。

出于向后兼容性考虑，`s3` 是默认设置，但建议明确设置，因为默认设置将来会被移除。

有关驱动程序的更多信息，请参阅 [FlyDrive 文档]（英文）。

<Aside type="caution">
  如果在生产过程中更改运行中 Hollo 的 `DRIVE_DISK` 和相关设置，
  现有文件不会移动；只有新文件会根据新设置存储。

  此外，请记住，现有文件仍将根据旧设置提供服务，因此，如果更改 `S3_BUCKET`，
  它们仍将从旧的存储桶提供服务，不应删除。
</Aside>

[FlyDrive 文档]: https://flydrive.dev/docs/drive_manager

### `STORAGE_URL_BASE`

资产存储的公共 URL 基础，例如：`https://media.hollo.social`。

当使用 `DRIVE_DISK=fs` 时，您应该设置此项以通过 Web 访问提供本地文件系统文件，
通常格式为 `https://<主机>/assets`，例如：`https://hollo.example.com/assets`。

<Aside type="caution">
  - 生产环境要求使用 HTTPS。
  - 必须可公开访问，联盟才能正常工作。
  - 为了灵活起见，我们建议使用`CNAME`域名，而不是对象存储的实际域名。
</Aside>

### 本地文件系统设置

#### `FS_STORAGE_PATH` <Badge text="FS 驱动程序必填" variant="note" />

文件在本地文件系统中的存储路径。例如：`/var/lib/hollo`。

<Aside>
  - 目录必须存在，且 Hollo 进程可以写入。
  - 建议权限： 目录权限为 755，文件权限为 644。
  - 确保使用情况下有足够的存储容量。
  - 强烈建议定期备份。
  - 使用 Docker 时，确保路径已正确挂载。
</Aside>

### 与 S3 兼容的对象存储设置

<Aside>
  只有在 `DRIVE_DISK=s3` 时才需要这些设置。

  确保 AWS IAM 策略授予以下权限：

  - `s3:PutObject`
  - `s3:GetObject`
  - `s3:DeleteObject`
  - `s3:ListBucket`
</Aside>

#### `S3_REGION` <Badge text="S3 驱动程序必填" variant="caution" />

S3兼容对象存储的区域，例如：`us-east-1`。在某些非S3服务中，可以省略此项。

#### `S3_BUCKET` <Badge text="S3 驱动程序必填" variant="caution" />

S3兼容对象存储的桶名称，例如：`hollo`。

#### `S3_ENDPOINT_URL` <Badge text="S3 驱动程序必填" variant="caution" />

S3兼容对象存储的端点URL，例如：
`https://s3.us-east-1.amazonaws.com`。

#### `S3_FORCE_PATH_STYLE`

是否强制在S3兼容对象存储中使用路径格式的URL。设置为`true`开启，`false`关闭。对于非AWS的S3兼容服务非常有用。默认关闭。

#### `AWS_ACCESS_KEY_ID` <Badge text="S3 驱动程序必填" variant="caution" />

S3兼容对象存储的访问密钥ID。

#### `AWS_SECRET_ACCESS_KEY` <Badge text="S3 驱动程序必填" variant="caution" />

S3兼容对象存储的访问密钥。
